{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: keras==2.2.4 in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (2.2.4)\n",
      "Requirement already satisfied: keras-preprocessing>=1.0.5 in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from keras==2.2.4) (1.1.2)\n",
      "Requirement already satisfied: scipy>=0.14 in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from keras==2.2.4) (1.6.2)\n",
      "Requirement already satisfied: six>=1.9.0 in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from keras==2.2.4) (1.16.0)\n",
      "Requirement already satisfied: keras-applications>=1.0.6 in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from keras==2.2.4) (1.0.8)\n",
      "Requirement already satisfied: numpy>=1.9.1 in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from keras==2.2.4) (1.19.2)\n",
      "Requirement already satisfied: pyyaml in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from keras==2.2.4) (6.0)\n",
      "Requirement already satisfied: h5py in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from keras==2.2.4) (3.6.0)\n",
      "Requirement already satisfied: cached-property in /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages (from h5py->keras==2.2.4) (1.5.2)\n"
     ]
    }
   ],
   "source": [
    "!pip install keras==2.2.4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "LspltVTXeWkl"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
      "/Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "#importing important libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import matplotlib.dates as dates\n",
    "from datetime import datetime\n",
    "from numpy import array\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import Flatten\n",
    "from keras.layers.convolutional import Conv1D\n",
    "from keras.layers.convolutional import MaxPooling1D\n",
    "\n",
    "from keras.datasets import mnist\n",
    "from keras.layers.core import Dense, Dropout, Activation, Flatten\n",
    "from keras.models import Sequential\n",
    "from keras.utils import np_utils\n",
    "\n",
    "import math"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 204
    },
    "id": "rqEXNnSJe7ME",
    "outputId": "3e0472f6-17b5-490c-a7ab-f46484871dab"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Month</th>\n",
       "      <th>#Passengers</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1949-01</td>\n",
       "      <td>112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1949-02</td>\n",
       "      <td>118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1949-03</td>\n",
       "      <td>132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1949-04</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1949-05</td>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Month  #Passengers\n",
       "0  1949-01          112\n",
       "1  1949-02          118\n",
       "2  1949-03          132\n",
       "3  1949-04          129\n",
       "4  1949-05          121"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df=pd.read_csv('AirPassengers.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 235
    },
    "id": "IG1rkGZd91Sc",
    "outputId": "11c89a93-9f40-4318-bffe-9ef463f3dbf9"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>#Passengers</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1949-01-01</th>\n",
       "      <td>112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1949-02-01</th>\n",
       "      <td>118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1949-03-01</th>\n",
       "      <td>132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1949-04-01</th>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1949-05-01</th>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            #Passengers\n",
       "Month                  \n",
       "1949-01-01          112\n",
       "1949-02-01          118\n",
       "1949-03-01          132\n",
       "1949-04-01          129\n",
       "1949-05-01          121"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Convert Month object into datetime\n",
    "df['Month'] = pd.to_datetime(df.Month)\n",
    "df = df.set_index(df.Month)\n",
    "df.drop('Month', axis = 1, inplace = True)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "MC1-jwR7e7JQ",
    "outputId": "9fa4f0d0-ed19-4a96-9b06-f357c8f041d2"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Month\n",
       "1949-01-01    112\n",
       "1949-02-01    118\n",
       "1949-03-01    132\n",
       "1949-04-01    129\n",
       "1949-05-01    121\n",
       "Name: #Passengers, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = df['#Passengers']\n",
    "ts.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "2usViZo3GsVm"
   },
   "source": [
    "# ANN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "id": "JTcivrSG0_c5"
   },
   "outputs": [],
   "source": [
    "#Applying min max scaler for better fitting\n",
    "scaler= MinMaxScaler()\n",
    "ts=np.array(ts).reshape(-1,1)\n",
    "ts=scaler.fit_transform(ts)\n",
    "train_size=int(0.7*len(ts))\n",
    "test_size=len(ts)-train_size\n",
    "train=ts[0:train_size,:]\n",
    "print (train)\n",
    "\n",
    "\n",
    "\n",
    "test=ts[train_size:,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "id": "PhWz8aXG1hb3"
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'x' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/x5/46xxxny51s7dgh2f4k1_ys280000gn/T/ipykernel_61919/2010725441.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;31m#The below code provides me training and test data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlook_back\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlook_back\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'x' is not defined"
     ]
    }
   ],
   "source": [
    "#Function to create dataset\n",
    "def get_data(data, look_back):\n",
    "    dataX, dataY = [], []\n",
    "    for i in range(len(data)-look_back-1):\n",
    "        a = data[i:(i+look_back), 0]\n",
    "        dataX.append(a)\n",
    "        dataY.append(data[i+look_back, 0])\n",
    "    return np.array(dataX), np.array(dataY)\n",
    "look_back = 1\n",
    "#The below code provides me training and test data\n",
    "X_train, y_train = get_data(train, look_back)\n",
    "# X_test, y_test = get_data(x, look_back)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "id": "wGhMfiwbBPcX"
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'X_test' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/x5/46xxxny51s7dgh2f4k1_ys280000gn/T/ipykernel_61919/3944026599.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m#reshaping training data in order to build the model for LSTMs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mX_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mX_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX_test\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_test\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'X_test' is not defined"
     ]
    }
   ],
   "source": [
    "#reshaping training data in order to build the model for LSTMs\n",
    "X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)\n",
    "X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "vVcM59qN1OAk",
    "outputId": "e1e57b66-30bb-4769-a8fc-10846ba711fe"
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "The added layer must be an instance of class Layer. Found: <keras.layers.core.Dense object at 0x7f860831c510>",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/x5/46xxxny51s7dgh2f4k1_ys280000gn/T/ipykernel_61919/2511686557.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# define model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mmodel1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSequential\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmodel1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDense\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mactivation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'relu'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0minput_shape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlook_back\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      4\u001b[0m \u001b[0mmodel1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDense\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mmodel1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'mean_squared_error'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'adam'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/training/tracking/base.py\u001b[0m in \u001b[0;36m_method_wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    455\u001b[0m     \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_self_setattr_tracking\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m  \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    456\u001b[0m     \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 457\u001b[0;31m       \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    458\u001b[0m     \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    459\u001b[0m       \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_self_setattr_tracking\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprevious_value\u001b[0m  \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/keras/engine/sequential.py\u001b[0m in \u001b[0;36madd\u001b[0;34m(self, layer)\u001b[0m\n\u001b[1;32m    152\u001b[0m       raise TypeError('The added layer must be '\n\u001b[1;32m    153\u001b[0m                       \u001b[0;34m'an instance of class Layer. '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 154\u001b[0;31m                       'Found: ' + str(layer))\n\u001b[0m\u001b[1;32m    155\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    156\u001b[0m     \u001b[0mtf_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massert_no_legacy_layers\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mlayer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: The added layer must be an instance of class Layer. Found: <keras.layers.core.Dense object at 0x7f860831c510>"
     ]
    }
   ],
   "source": [
    "# define model\n",
    "model1 = keras.Sequential()\n",
    "model1.add(Dense(100,activation='relu',input_shape = (1,look_back)))\n",
    "model1.add(Dense(1))\n",
    "model1.compile(loss='mean_squared_error', optimizer='adam')\n",
    "model1.fit(X_train, y_train, epochs=80, batch_size=32, verbose=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "SNYBFBQdBoOV",
    "outputId": "b4381d44-cdf7-46ce-a4cd-fa5e145dbf17"
   },
   "outputs": [
    {
     "ename": "RuntimeError",
     "evalue": "You must compile your model before training/testing. Use `model.compile(optimizer, loss)`.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/x5/46xxxny51s7dgh2f4k1_ys280000gn/T/ipykernel_61919/586926929.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtrainScore\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Train Score: %.2f MSE (%.2f RMSE)'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mtrainScore\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrainScore\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mtestScore\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Test Score: %.2f MSE (%.2f RMSE)'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mtestScore\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtestScore\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mevaluate\u001b[0;34m(self, x, y, batch_size, verbose, sample_weight, steps, callbacks, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m    867\u001b[0m     \"\"\"\n\u001b[1;32m    868\u001b[0m     \u001b[0m_keras_api_gauge\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_cell\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'evaluate'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 869\u001b[0;31m     \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_assert_compile_was_called\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    870\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    871\u001b[0m     \u001b[0;31m# Case 1: distribution strategy.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36m_assert_compile_was_called\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m   2932\u001b[0m     \u001b[0;31m# (i.e. whether the model is built and its inputs/outputs are set).\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2933\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptimizer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2934\u001b[0;31m       raise RuntimeError('You must compile your model before '\n\u001b[0m\u001b[1;32m   2935\u001b[0m                          \u001b[0;34m'training/testing. '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2936\u001b[0m                          'Use `model.compile(optimizer, loss)`.')\n",
      "\u001b[0;31mRuntimeError\u001b[0m: You must compile your model before training/testing. Use `model.compile(optimizer, loss)`."
     ]
    }
   ],
   "source": [
    "trainScore = model1.evaluate(X_train, y_train, verbose=0)\n",
    "print('Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore)))\n",
    "testScore = model1.evaluate(X_test, y_test, verbose=0)\n",
    "print('Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 320
    },
    "id": "5bSJv5JHB1zV",
    "outputId": "e1900913-d2e4-43f7-9708-94162a0c63ef"
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'X_test' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/x5/46xxxny51s7dgh2f4k1_ys280000gn/T/ipykernel_61919/1944724842.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0my_pred1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;31m#inverse transform because I wanted to plot actual values and not the normalized ones\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0my_pred1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minverse_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0my_test1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'X_test' is not defined"
     ]
    }
   ],
   "source": [
    "y_pred = model1.predict(X_test)\n",
    "y_pred1=y_pred.reshape(-1,1)\n",
    "#inverse transform because I wanted to plot actual values and not the normalized ones\n",
    "y_pred1 = scaler.inverse_transform(y_pred1)\n",
    "y_test1=y_test.reshape(-1,1)\n",
    "y_test1 = scaler.inverse_transform(y_test1)\n",
    "# plot baseline and predictions\n",
    "plt.figure(figsize=(14,5))\n",
    "plt.plot(y_test1, label = 'Real number of passengers')\n",
    "plt.plot(y_pred1, label = 'Predicted number of passengers')\n",
    "plt.ylabel('# passengers')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "EfsMrr1cGj1M"
   },
   "source": [
    "# Convolutional Neural Networks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ZiaidDQQGxlG",
    "outputId": "7c761661-873b-43a8-cedc-6e1c508a3a9d"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n",
      "\n",
      "WARNING:tensorflow:From /Users/liguanghui/opt/anaconda3/envs/py37-pytorch/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n",
      "\n",
      "Epoch 1/40\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2022-03-31 21:22:34.161437: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "98/98 [==============================] - 0s 3ms/step - loss: 0.0692\n",
      "Epoch 2/40\n",
      "98/98 [==============================] - 0s 58us/step - loss: 0.0576\n",
      "Epoch 3/40\n",
      "98/98 [==============================] - 0s 50us/step - loss: 0.0470\n",
      "Epoch 4/40\n",
      "98/98 [==============================] - 0s 60us/step - loss: 0.0378\n",
      "Epoch 5/40\n",
      "98/98 [==============================] - 0s 64us/step - loss: 0.0306\n",
      "Epoch 6/40\n",
      "98/98 [==============================] - 0s 51us/step - loss: 0.0241\n",
      "Epoch 7/40\n",
      "98/98 [==============================] - 0s 66us/step - loss: 0.0192\n",
      "Epoch 8/40\n",
      "98/98 [==============================] - 0s 69us/step - loss: 0.0147\n",
      "Epoch 9/40\n",
      "98/98 [==============================] - 0s 76us/step - loss: 0.0118\n",
      "Epoch 10/40\n",
      "98/98 [==============================] - 0s 63us/step - loss: 0.0096\n",
      "Epoch 11/40\n",
      "98/98 [==============================] - 0s 74us/step - loss: 0.0086\n",
      "Epoch 12/40\n",
      "98/98 [==============================] - 0s 63us/step - loss: 0.0082\n",
      "Epoch 13/40\n",
      "98/98 [==============================] - 0s 65us/step - loss: 0.0079\n",
      "Epoch 14/40\n",
      "98/98 [==============================] - 0s 82us/step - loss: 0.0077\n",
      "Epoch 15/40\n",
      "98/98 [==============================] - 0s 78us/step - loss: 0.0076\n",
      "Epoch 16/40\n",
      "98/98 [==============================] - 0s 58us/step - loss: 0.0074\n",
      "Epoch 17/40\n",
      "98/98 [==============================] - 0s 70us/step - loss: 0.0071\n",
      "Epoch 18/40\n",
      "98/98 [==============================] - 0s 75us/step - loss: 0.0068\n",
      "Epoch 19/40\n",
      "98/98 [==============================] - 0s 71us/step - loss: 0.0065\n",
      "Epoch 20/40\n",
      "98/98 [==============================] - 0s 85us/step - loss: 0.0062\n",
      "Epoch 21/40\n",
      "98/98 [==============================] - 0s 82us/step - loss: 0.0059\n",
      "Epoch 22/40\n",
      "98/98 [==============================] - 0s 69us/step - loss: 0.0058\n",
      "Epoch 23/40\n",
      "98/98 [==============================] - 0s 79us/step - loss: 0.0056\n",
      "Epoch 24/40\n",
      "98/98 [==============================] - 0s 72us/step - loss: 0.0054\n",
      "Epoch 25/40\n",
      "98/98 [==============================] - 0s 67us/step - loss: 0.0052\n",
      "Epoch 26/40\n",
      "98/98 [==============================] - 0s 78us/step - loss: 0.0050\n",
      "Epoch 27/40\n",
      "98/98 [==============================] - 0s 79us/step - loss: 0.0048\n",
      "Epoch 28/40\n",
      "98/98 [==============================] - 0s 71us/step - loss: 0.0046\n",
      "Epoch 29/40\n",
      "98/98 [==============================] - 0s 56us/step - loss: 0.0044\n",
      "Epoch 30/40\n",
      "98/98 [==============================] - 0s 62us/step - loss: 0.0041\n",
      "Epoch 31/40\n",
      "98/98 [==============================] - 0s 64us/step - loss: 0.0039\n",
      "Epoch 32/40\n",
      "98/98 [==============================] - 0s 63us/step - loss: 0.0037\n",
      "Epoch 33/40\n",
      "98/98 [==============================] - 0s 77us/step - loss: 0.0035\n",
      "Epoch 34/40\n",
      "98/98 [==============================] - 0s 79us/step - loss: 0.0033\n",
      "Epoch 35/40\n",
      "98/98 [==============================] - 0s 59us/step - loss: 0.0031\n",
      "Epoch 36/40\n",
      "98/98 [==============================] - 0s 74us/step - loss: 0.0029\n",
      "Epoch 37/40\n",
      "98/98 [==============================] - 0s 68us/step - loss: 0.0028\n",
      "Epoch 38/40\n",
      "98/98 [==============================] - 0s 80us/step - loss: 0.0026\n",
      "Epoch 39/40\n",
      "98/98 [==============================] - 0s 80us/step - loss: 0.0025\n",
      "Epoch 40/40\n",
      "98/98 [==============================] - 0s 89us/step - loss: 0.0024\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x7f860a6c2f90>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# define model\n",
    "model2 = Sequential()\n",
    "model2.add(Conv1D(filters=10, kernel_size=1, activation='relu', input_shape=(1,look_back)))\n",
    "model2.add(Flatten())\n",
    "model2.add(Dense(50, activation='relu'))\n",
    "model2.add(Dense(1))\n",
    "model2.compile(optimizer='adam', loss='mse')\n",
    "# fit model\n",
    "model2.fit(X_train, y_train,batch_size=32 ,epochs=40, verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "xQxdowzmFYZN",
    "outputId": "8802ee85-da1a-42ed-9912-6f6dd833c595"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Score: 0.00 MSE (0.05 RMSE)\n"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'X_test' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/x5/46xxxny51s7dgh2f4k1_ys280000gn/T/ipykernel_61919/2676899519.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mtrainScore\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Train Score: %.2f MSE (%.2f RMSE)'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mtrainScore\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrainScore\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mtestScore\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Test Score: %.2f MSE (%.2f RMSE)'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mtestScore\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtestScore\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'X_test' is not defined"
     ]
    }
   ],
   "source": [
    "trainScore = model2.evaluate(X_train, y_train, verbose=0)\n",
    "print('Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore)))\n",
    "testScore = model2.evaluate(X_test, y_test, verbose=0)\n",
    "print('Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 357
    },
    "id": "0S_mXfOVGxe5",
    "outputId": "e340a843-93e9-472f-8ad8-fba187bc3e06"
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'X_test' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/x5/46xxxny51s7dgh2f4k1_ys280000gn/T/ipykernel_61919/2252648948.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0my_pred2\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0my_pred2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minverse_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0my_test2\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0my_test2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minverse_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'X_test' is not defined"
     ]
    }
   ],
   "source": [
    "y_pred = model2.predict(X_test)\n",
    "y_pred2=y_pred.reshape(-1,1)\n",
    "y_pred2 = scaler.inverse_transform(y_pred2)\n",
    "y_test2=y_test.reshape(-1,1)\n",
    "y_test2 = scaler.inverse_transform(y_test2)\n",
    "# plot baseline and predictions\n",
    "plt.figure(figsize=(14,5))\n",
    "plt.plot(y_test2, label = 'Real number of passengers')\n",
    "plt.plot(y_pred2, label = 'Predicted number of passengers')\n",
    "plt.ylabel('# passengers')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Qj55L61nKqQ6"
   },
   "source": [
    "# LSTMs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "AEADcgJWe7Ay",
    "outputId": "d91ce0f7-c4b3-40f7-e683-ab98b75d68db",
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[0.01544402]]\n",
      "\n",
      " [[0.02702703]]\n",
      "\n",
      " [[0.05405405]]\n",
      "\n",
      " [[0.04826255]]\n",
      "\n",
      " [[0.03281853]]\n",
      "\n",
      " [[0.05984556]]\n",
      "\n",
      " [[0.08494208]]\n",
      "\n",
      " [[0.08494208]]\n",
      "\n",
      " [[0.06177606]]\n",
      "\n",
      " [[0.02895753]]\n",
      "\n",
      " [[0.        ]]\n",
      "\n",
      " [[0.02702703]]\n",
      "\n",
      " [[0.02123552]]\n",
      "\n",
      " [[0.04247104]]\n",
      "\n",
      " [[0.07142857]]\n",
      "\n",
      " [[0.05984556]]\n",
      "\n",
      " [[0.04054054]]\n",
      "\n",
      " [[0.08687259]]\n",
      "\n",
      " [[0.12741313]]\n",
      "\n",
      " [[0.12741313]]\n",
      "\n",
      " [[0.1042471 ]]\n",
      "\n",
      " [[0.05598456]]\n",
      "\n",
      " [[0.01930502]]\n",
      "\n",
      " [[0.06949807]]\n",
      "\n",
      " [[0.07915058]]\n",
      "\n",
      " [[0.08880309]]\n",
      "\n",
      " [[0.14285714]]\n",
      "\n",
      " [[0.11389961]]\n",
      "\n",
      " [[0.13127413]]\n",
      "\n",
      " [[0.14285714]]\n",
      "\n",
      " [[0.18339768]]\n",
      "\n",
      " [[0.18339768]]\n",
      "\n",
      " [[0.15444015]]\n",
      "\n",
      " [[0.11196911]]\n",
      "\n",
      " [[0.08108108]]\n",
      "\n",
      " [[0.11969112]]\n",
      "\n",
      " [[0.12934363]]\n",
      "\n",
      " [[0.14671815]]\n",
      "\n",
      " [[0.17181467]]\n",
      "\n",
      " [[0.14864865]]\n",
      "\n",
      " [[0.15250965]]\n",
      "\n",
      " [[0.22007722]]\n",
      "\n",
      " [[0.24324324]]\n",
      "\n",
      " [[0.26640927]]\n",
      "\n",
      " [[0.2027027 ]]\n",
      "\n",
      " [[0.16795367]]\n",
      "\n",
      " [[0.13127413]]\n",
      "\n",
      " [[0.17374517]]\n",
      "\n",
      " [[0.17760618]]\n",
      "\n",
      " [[0.17760618]]\n",
      "\n",
      " [[0.25482625]]\n",
      "\n",
      " [[0.25289575]]\n",
      "\n",
      " [[0.24131274]]\n",
      "\n",
      " [[0.26833977]]\n",
      "\n",
      " [[0.30888031]]\n",
      "\n",
      " [[0.32432432]]\n",
      "\n",
      " [[0.25675676]]\n",
      "\n",
      " [[0.20656371]]\n",
      "\n",
      " [[0.14671815]]\n",
      "\n",
      " [[0.18725869]]\n",
      "\n",
      " [[0.19305019]]\n",
      "\n",
      " [[0.16216216]]\n",
      "\n",
      " [[0.25289575]]\n",
      "\n",
      " [[0.23745174]]\n",
      "\n",
      " [[0.25096525]]\n",
      "\n",
      " [[0.30888031]]\n",
      "\n",
      " [[0.38223938]]\n",
      "\n",
      " [[0.36486486]]\n",
      "\n",
      " [[0.2992278 ]]\n",
      "\n",
      " [[0.24131274]]\n",
      "\n",
      " [[0.19111969]]\n",
      "\n",
      " [[0.24131274]]\n",
      "\n",
      " [[0.26640927]]\n",
      "\n",
      " [[0.24903475]]\n",
      "\n",
      " [[0.31467181]]\n",
      "\n",
      " [[0.31853282]]\n",
      "\n",
      " [[0.32046332]]\n",
      "\n",
      " [[0.40733591]]\n",
      "\n",
      " [[0.5019305 ]]\n",
      "\n",
      " [[0.46911197]]\n",
      "\n",
      " [[0.4015444 ]]\n",
      "\n",
      " [[0.32818533]]\n",
      "\n",
      " [[0.25675676]]\n",
      "\n",
      " [[0.33590734]]\n",
      "\n",
      " [[0.34749035]]\n",
      "\n",
      " [[0.33397683]]\n",
      "\n",
      " [[0.41119691]]\n",
      "\n",
      " [[0.4034749 ]]\n",
      "\n",
      " [[0.41312741]]\n",
      "\n",
      " [[0.52123552]]\n",
      "\n",
      " [[0.5965251 ]]\n",
      "\n",
      " [[0.58108108]]\n",
      "\n",
      " [[0.48455598]]\n",
      "\n",
      " [[0.38996139]]\n",
      "\n",
      " [[0.32239382]]\n",
      "\n",
      " [[0.38996139]]\n",
      "\n",
      " [[0.40733591]]\n",
      "\n",
      " [[0.38030888]]]\n",
      "==========================\n",
      "[0.02702703 0.05405405 0.04826255 0.03281853 0.05984556 0.08494208\n",
      " 0.08494208 0.06177606 0.02895753 0.         0.02702703 0.02123552\n",
      " 0.04247104 0.07142857 0.05984556 0.04054054 0.08687259 0.12741313\n",
      " 0.12741313 0.1042471  0.05598456 0.01930502 0.06949807 0.07915058\n",
      " 0.08880309 0.14285714 0.11389961 0.13127413 0.14285714 0.18339768\n",
      " 0.18339768 0.15444015 0.11196911 0.08108108 0.11969112 0.12934363\n",
      " 0.14671815 0.17181467 0.14864865 0.15250965 0.22007722 0.24324324\n",
      " 0.26640927 0.2027027  0.16795367 0.13127413 0.17374517 0.17760618\n",
      " 0.17760618 0.25482625 0.25289575 0.24131274 0.26833977 0.30888031\n",
      " 0.32432432 0.25675676 0.20656371 0.14671815 0.18725869 0.19305019\n",
      " 0.16216216 0.25289575 0.23745174 0.25096525 0.30888031 0.38223938\n",
      " 0.36486486 0.2992278  0.24131274 0.19111969 0.24131274 0.26640927\n",
      " 0.24903475 0.31467181 0.31853282 0.32046332 0.40733591 0.5019305\n",
      " 0.46911197 0.4015444  0.32818533 0.25675676 0.33590734 0.34749035\n",
      " 0.33397683 0.41119691 0.4034749  0.41312741 0.52123552 0.5965251\n",
      " 0.58108108 0.48455598 0.38996139 0.32239382 0.38996139 0.40733591\n",
      " 0.38030888 0.48648649]\n",
      "Epoch 1/20\n",
      "98/98 [==============================] - 1s 8ms/step - loss: 0.0629\n",
      "Epoch 2/20\n",
      "98/98 [==============================] - 0s 160us/step - loss: 0.0516\n",
      "Epoch 3/20\n",
      "98/98 [==============================] - 0s 161us/step - loss: 0.0423\n",
      "Epoch 4/20\n",
      "98/98 [==============================] - 0s 157us/step - loss: 0.0347\n",
      "Epoch 5/20\n",
      "98/98 [==============================] - 0s 156us/step - loss: 0.0283\n",
      "Epoch 6/20\n",
      "98/98 [==============================] - 0s 174us/step - loss: 0.0237\n",
      "Epoch 7/20\n",
      "98/98 [==============================] - 0s 155us/step - loss: 0.0204\n",
      "Epoch 8/20\n",
      "98/98 [==============================] - 0s 165us/step - loss: 0.0179\n",
      "Epoch 9/20\n",
      "98/98 [==============================] - 0s 161us/step - loss: 0.0166\n",
      "Epoch 10/20\n",
      "98/98 [==============================] - 0s 163us/step - loss: 0.0159\n",
      "Epoch 11/20\n",
      "98/98 [==============================] - 0s 157us/step - loss: 0.0157\n",
      "Epoch 12/20\n",
      "98/98 [==============================] - 0s 166us/step - loss: 0.0155\n",
      "Epoch 13/20\n",
      "98/98 [==============================] - 0s 175us/step - loss: 0.0154\n",
      "Epoch 14/20\n",
      "98/98 [==============================] - 0s 177us/step - loss: 0.0152\n",
      "Epoch 15/20\n",
      "98/98 [==============================] - 0s 172us/step - loss: 0.0149\n",
      "Epoch 16/20\n",
      "98/98 [==============================] - 0s 167us/step - loss: 0.0147\n",
      "Epoch 17/20\n",
      "98/98 [==============================] - 0s 162us/step - loss: 0.0145\n",
      "Epoch 18/20\n",
      "98/98 [==============================] - 0s 155us/step - loss: 0.0142\n",
      "Epoch 19/20\n",
      "98/98 [==============================] - 0s 153us/step - loss: 0.0139\n",
      "Epoch 20/20\n",
      "98/98 [==============================] - 0s 148us/step - loss: 0.0137\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x7f85ecf86550>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# define model\n",
    "from keras.layers import LSTM\n",
    "model3 = Sequential()\n",
    "import time\n",
    " \n",
    "# 格式化成2016-03-20 11:45:39形式\n",
    "model3.add(LSTM(20, activation='relu', input_shape=(1,look_back)))\n",
    "model3.add(Dense(20, activation='relu'))\n",
    "model3.add(Dense(1))\n",
    "model3.compile(optimizer='Adam', loss='mse')\n",
    "\n",
    "print (X_train)\n",
    "print (\"==========================\")\n",
    "print (y_train)\n",
    "\n",
    "# fit model\n",
    "model3.fit(X_train, y_train,batch_size=16, epochs=20, verbose=1)\n",
    "# Estimate model performance and plots\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "pUeyiD1mHQvd",
    "outputId": "cb9e1d25-a6b8-4759-db60-d0ba227e9659"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Score: 0.01 MSE (0.08 RMSE)\n",
      "Test Score: 0.01 MSE (0.09 RMSE)\n"
     ]
    }
   ],
   "source": [
    "trainScore = model3.evaluate(X_train, y_train, verbose=0)\n",
    "print('Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore)))\n",
    "testScore = model3.evaluate(X_test, y_test, verbose=0)\n",
    "print('Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 357
    },
    "id": "GpKIndwppc-g",
    "outputId": "981fe49a-bf9d-4ad2-e82c-c34c76612de5"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "42\n",
      "42\n"
     ]
    },
    {
     "data": {
      "image/png": "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hx8AKCsro7i4mAsvvJDnn3/+xOcxNTWVUaNG8de//pXAwEAyMzPt/hgGDBhAWloa6enpAHz66acn/m7GjBm89NJLJxKmbdu2nXaNw4cP061bN2699VZuvvlmtm7des6PXwghhBD225BWQEiAByEB5tULNYoL9edIUSXHiqtMX1ucmSN3hrKALK31poY/f4GRDOUopXo27Ar1BHJPenzISdf3BrJPXVRr/QbwBkB8fHzTtgXagFtuuYX09HSGDx+O1pqgoCC++eYbLr30UlasWMHQoUPp16/faV/YBwUF8cYbb3DZZZdhtVrp1q0bS5cu5eKLL+byyy9n4cKFvPTSS7z44ovcddddREdHU1dXx8SJE3nttdf485//zLx58xg+fDiTJk0iNDTUrthvvfVWZs2axciRI5k6deoZd23Opn///kyaNImcnBxee+21E8fQTvc5OZuePXvyf//3f0yePBmtNRdeeCGzZs065/OPGTOGxx9/nJ07d55opmCxWIiNjWXw4MFERkYybtw4AEpLS5k1axZVVVVorXnuuecAeOSRRzhw4ABaa6ZOncqwYcOIjo6262Pw8PDglVde4fzzzycwMJCRI0ee+Ls//vGP3H///URHR6O1Jjw8/ESziZOtWrWKp59+GhcXF7y9vXn//ffP+fELIYQQwj5Wq2ZjWiEzBnd3yPpxYUbZQtLh48yM7umQ5xC/ppp6zMimxZVai9FAYZ9S6kmg8VVzgdb6n0qpx4EArfWjSqnBwMcYdUK9gOVAX631GXspx8fH68buao327NnDwIEDHfDRiI5i1apVPPPMM6dNLFpDWVkZ3t7eaK2566676Nu3Lw888ICpzyH/L4QQQojm2XWkmIteWsdzVw7j0tjepq9fW29l6JM/cdXIMP508ZlHqYimUUolaa3jT32/I3eGAO4BPlJKuQJpwI0YR/M+U0rdDGQAcwC01ruVUp8BKUAdcNfZEiEhOoo333yT9957j5qamhPtzoUQQgjRtmxomC80JrL584VOx8XJQnRvP5IypG6oJTk0GdJaJwO/ysCAqWd4/FPAU46MSYiEhAQSEhJaO4wTHnjgAdN3goQQQghhrg1pBUQGetHD191hzxEX5s+ba9Koqq3H3cXJYc8j/sehQ1eFEEIIIYRo7+rqrWw+VMgYk1tqnyou1J86q2ZHVrFDn0f8T4dMhhxZ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\n",
      "text/plain": [
       "<Figure size 1008x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print (len(X_test))\n",
    "\n",
    "y_pred = model3.predict(X_test)\n",
    "print(len(y_pred))\n",
    "y_pred3= y_pred.reshape(-1,1)\n",
    "y_pred3 = scaler.inverse_transform(y_pred3)\n",
    "y_test3=y_test.reshape(-1,1)\n",
    "y_test3 = scaler.inverse_transform(y_test3)\n",
    "# plot baseline and predictions\n",
    "plt.figure(figsize=(14,5))\n",
    "plt.plot(y_test3, label = 'Real number of passengers')\n",
    "plt.plot(y_pred3, label = 'Predicted number of passengers')\n",
    "plt.ylabel('# passengers')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ugbNQbBBKAdt"
   },
   "source": [
    "### LSTM gave the best predictions."
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "Best Time series DL.ipynb",
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
